commonlibsse_ng\re\b\BSTArray/
mod.rs1mod scrap;
2pub mod IAllocatorFunctor;
3mod allocator;
4mod heap;
5mod small_heap;
6
7use core::ptr::NonNull;
8use core::slice;
9
10pub use self::scrap::BSScrapArray;
11pub use self::{heap::BSTArray, small_heap::BSTSmallArray};
12
13#[repr(C)]
14#[derive(Debug, PartialEq)]
15pub struct BSStaticArray<T> {
16 data: NonNull<T>,
17 size: u32,
18}
19
20impl<T> BSStaticArray<T> {
21 #[inline]
23 pub const fn new(data: *mut T, size: u32) -> Self {
24 Self { data: NonNull::new(data).expect("data pointer must not be null"), size }
25 }
26
27 #[inline]
28 pub const fn as_slice(&self) -> &[T] {
29 unsafe { slice::from_raw_parts(self.data.as_ptr(), self.size as usize) }
30 }
31
32 #[inline]
33 pub const fn as_mut_slice(&mut self) -> &mut [T] {
34 unsafe { slice::from_raw_parts_mut(self.data.as_ptr(), self.size as usize) }
35 }
36
37 #[inline]
38 pub const fn len(&self) -> u32 {
39 self.size
40 }
41
42 #[inline]
43 pub const fn is_empty(&self) -> bool {
44 self.size == 0
45 }
46
47 #[inline]
48 pub fn get(&self, index: u32) -> Option<&T> {
49 self.as_slice().get(index as usize)
50 }
51
52 #[inline]
53 pub fn get_mut(&mut self, index: u32) -> Option<&mut T> {
54 self.as_mut_slice().get_mut(index as usize)
55 }
56
57 #[inline]
58 pub fn front(&self) -> Option<&T> {
59 self.get(0)
60 }
61
62 #[inline]
63 pub fn front_mut(&mut self) -> Option<&mut T> {
64 self.get_mut(0)
65 }
66
67 #[inline]
68 pub fn back(&self) -> Option<&T> {
69 self.get(self.size - 1)
70 }
71
72 #[inline]
73 pub fn back_mut(&mut self) -> Option<&mut T> {
74 self.get_mut(self.size - 1)
75 }
76
77 #[inline]
78 pub fn iter(&self) -> core::slice::Iter<T> {
79 self.as_slice().iter()
80 }
81
82 #[inline]
83 pub fn iter_mut(&mut self) -> core::slice::IterMut<T> {
84 self.as_mut_slice().iter_mut()
85 }
86}